<

rememberChild() メソッドは super を呼び出す必要があります

まとめ

最近のグローバル キー重複検出リファクタリングでは、次のことが必要になりました。ElementをオーバーライドするサブクラスforgetChild()電話するsuper()

コンテクスト

グローバルキーの重複が発生した場合、 後で要素を再構築することでクリーンアップされます。 グローバルキーの重複を報告してはなりません。 以前の実装では、すぐにエラーがスローされました。 重複が検出され、再構築を待機しなかった場合、 重複したグローバル キーを持つ要素は再構築されます。

新しい実装では、すべてのグローバルな情報が追跡されます。 ビルドサイクル中のキーの重複を防ぎ、グローバルのみを検証します。 そのサイクルの終わりに、代わりにキーを複製します。 すぐにエラーをスローします。リファクタリングの一環として、 以前のグローバルキーを削除するメカニズムを実装しました での重複forgetChild再構築が行われていたら。 ただし、これにはすべてが必要ですElementサブクラス オーバーライドforgetChildに電話するsuper方法。

変更内容の説明

forgetChild抽象クラスのElement基地がある グローバルキー予約を削除する実装、 そしてそれはによって施行されます@mustCallSuperメタタグ。 メソッドをオーバーライドするすべてのサブクラスは呼び出す必要があります。super; それ以外の場合、アナライザーは lint エラーを表示し、 グローバル キーの重複を検出すると、予期しないエラーが発生する可能性があります。

移行ガイド

次の例では、アプリのElementサブクラスはforgetChild方法。

移行前のコード:

class CustomElement extends Element {

    @override
    void forgetChild(Element child) {
        ...
    }
}

移行後のコード:

class CustomElement extends Element {

    @override
    void forgetChild(Element child) {
        ...
        super.forgetChild(child);
    }
}

タイムライン

リリースされたバージョン: 1.16.3
安定版リリース: 1.17

参考文献

API ドキュメント:

  • Element
  • forgetChild()

関連する問題:

  • 問題 43780

関連する PR:

  • PR 43790:グローバル キー エラーを修正